This invention relates to the analysis of computer programs, and in particular, the reporting of messages generated by the analysis of computer programs.
Computer programs are typically complicated structures. Various structural and behavioral aspects of computer programs are of interest to those who design and fix them. For example, a computer engineer (or programmer) may, in a large-scale software project, desire a list of subroutines that allocate memory or are likely to call other specific functions. Further, a programmer may want to establish a list of messages regarding circumstances under which resources (e.g., memory, disk space, and modem connections) are needed, allocated or removed. In addition, a programmer may desire a list of messages regarding possible paths in which the program may or may not execute, as well as possible paths along which the program might fail or produce defective results.
One method of generating the messages described above is to manually produce them. However, this method is often times impractical since it may be very tedious and time consuming. Instead, various automated methods for producing list of messages have been developed. Applications in which messages are automatically generated include, for example, various computer program compilers (e.g., Native DEC and GNU C++ compilers) and software component simulation technology (e.g., PREfix/Enterprise developed by Intrinsa Corporation of Mountain View, Calif.). The automated methods for producing lists of messages, however, offer no effective method of distinguishing between messages that relate to issues that are of more importance to a programmer, without having to examine a vast majority of the generated messages. For instance, some of the generated messages may be of more importance, depending upon the content of the messages, the likelihood of the message being accurate, the ease with which the message can be understood, as well as other factors.
In typical message generation applications, messages are presented in the order in which the respective errors were found. Alternatively, messages may be presented in alphabetical order. Therefore, it is typically necessary to wade through many non-critical messages before finding a message generated in response to the detection of a critical one. As a result, a great deal of time (and expense) may be spent examining unimportant messages before actually finding a critical message.
Computer program compiler systems rank and report messages to a system user according to program information, warnings and errors. Compiler message rankings, however, are solely based on the severity of detected errors, which are in turn based upon warning types. In addition, compilers provide no explanation for why the ranking values are assigned to their respective messages. Moreover, compilers provide no method of sorting specific message types in which a programmer may be particularly interested. Therefore, a method of automatically assigning rankings to program messages in order to separate important messages from less significant messages before review is desired.
According to one embodiment, a method of automatically assigning a ranking value to a plurality of received messages is disclosed. Each of the received messages provides information about a computer program. The method includes receiving a first message, and automatically assigning a ranking value to the first message based upon a predetermined set of criteria.